package com.sky.controller.admin;

import com.sky.dto.VisaProductDTO;
import com.sky.dto.VisaProductPageQueryDTO;
import com.sky.dto.VisaProductUpdateDTO;
import com.sky.entity.VisaProduct;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.VisaProductService;
import com.sky.vo.VisaProductVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;  
import com.sky.annotation.IgnoreToken;

/**
 * 管理员端签证产品控制器
 * 负责处理与签证产品相关的HTTP请求，包括新增、查询、修改、删除等操作
 */
@RestController
@Slf4j
@RequestMapping("/admin/visaProduct")
@Api(tags="签证产品相关接口")//Swagger文档标签，说明该类作用
@CrossOrigin
public class VisaProductController {
    @Autowired
    private VisaProductService visaProductService;


    /**
     * 新增签证产品
     * @param visaProductDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增签证产品")
    public Result<Long> addVisaProduct(@RequestBody VisaProductDTO visaProductDTO) {
        //打印日志，记录新增操作及参数
        log.info("VisaProductController -> addVisaProduct: {}", visaProductDTO);
        Long visaProductId = visaProductService.addVisaProduct(visaProductDTO);
        return Result.success(visaProductId);
    }

    /**
     * 分页查询签证产品
     * @param visaProductPageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation(value = "分页查询签证产品")
    public Result<PageResult> page(VisaProductPageQueryDTO visaProductPageQueryDTO){
        log.info("查询申请表模板列表, 参数:{}", visaProductPageQueryDTO);
        PageResult pageResult = visaProductService.page(visaProductPageQueryDTO);
        return Result.success(pageResult);
    }

    /**
     * 根据id查询签证产品
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询签证产品")
    public Result<VisaProduct> getById(@PathVariable Long id){
        log.info("根据id查询签证产品: {}", id);
        VisaProduct visaProduct = visaProductService.getById(id);
        return Result.success(visaProduct);
    }
    /**
     * 获取签证产品详情（包含国家名称）
     * @param id
     * @return
     */
    @GetMapping("/detail/{id}")
    @ApiOperation("获取签证产品详情")
    public Result<VisaProduct> getDetailById(@PathVariable Long id){
        log.info("获取签证产品详情: {}", id);
        VisaProduct visaProduct = visaProductService.getDetailById(id);
        return Result.success(visaProduct);
    }
    /**
     * 修改签证产品
     * @param visaProductUpdateDTO
     * @return
     */
    @PutMapping
    @ApiOperation("修改签证产品")
    public Result updateVisaProduct(@RequestBody VisaProductUpdateDTO visaProductUpdateDTO) {
        log.info("VisaProductController -> updateVisaProduct: {}", visaProductUpdateDTO);
        visaProductService.updateVisaProduct(visaProductUpdateDTO);
        return Result.success();
    }

    /**
     * 启用或禁用签证产品
     * @param id
     * @param isShow
     * @return
     */
    @PostMapping("/status/{isShow}")
    @ApiOperation(value = "启用或禁用签证产品")
    public Result<String> startOrStop(Long id, @PathVariable Integer isShow){
        log.info("启用或禁用签证国家,参数:id:{},isShow:{}",id,isShow);
        visaProductService.startOrStop(id,isShow);
        return Result.success();
    }

    /**
     * 删除签证产品
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    @ApiOperation("删除签证产品")
    public Result<String> deleteVisaProduct(@PathVariable Long id) {
        log.info("VisaProductController -> deleteVisaProduct: {}", id);
        visaProductService.deleteVisaProduct(id);
        return Result.success();
    }

    /**
     * 根据国家id查询签证产品列表
     * @param countryId
     * @return
     */
    @IgnoreToken
    @GetMapping("/countryitemlist/{countryId}")
    @ApiOperation("根据国家id查询签证产品列表")
    public Result<List<VisaProduct>> getVisaProductsByCountryId(@PathVariable Long countryId) {
        log.info("根据国家id查询签证产品列表：{}", countryId);
        // 获取完整的签证产品列表，包含所有需要的字段
        List<VisaProduct> list = visaProductService.getVisaProductsByCountryId(countryId);
        
        // 添加日志以检查返回的数据
        log.info("返回的签证产品列表数据：{}", list);
        
        return Result.success(list);
    }
}
